Function.prototype.mybind = function (thisArg) {
  // 保存this变量 因为闭包 不好找到this 也就是mybind的调用者 play
  let self = this;
  //   第一个括号的参数
  let argus = Array.from(arguments).slice(1);
  return function F() {
    //   第二个括号的参数
    let argus1 = Array.from(arguments);
    // 参数进行拼接
    let argssum = argus.concat(argus1);
    // 判断是不是new出来的 因为new里面this会丢失
    if (this instanceof F) {
      // 是new出来的话 就让当前的这个实例作为this
      self.apply(this, argssum);
    } else {
      // 不是new的话 就直接是传入的这个对象作为this
      self.apply(thisArg, argssum);
    }
  };
};
function play(name, age, sex) {
  console.log(name + age + sex);
}

let obj = {
  name: "coderqian111",
};
// play.call(obj, "112");
let res = play.mybind(obj, "coderqian", 22);
res("男");
